package br.fafica.poo2.rightcode.aluno;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

import br.fafica.poo2.rightcode.Aplicacao;
import br.fafica.poo2.rightcode.disciplina.Disciplina;
import br.fafica.poo2.rightcode.exception.AlunoNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.listaAlunoVaziaException;

public class RepositorioAlunoFila implements IRepositorioAluno {

	private Queue<Aluno> filaAluno;
	private static int increment;
	
	public RepositorioAlunoFila(){
		this.filaAluno = new LinkedList<Aluno>();
		increment = (getCodigoIncrement()+1);
		System.err.println("CONTRUTOR DE QUEUE ALUNO");
	}
	
	private int getCodigoIncrement(){
		return filaAluno.size();
	}
	
	
	public void TesteAluno() throws SQLException {
		
		
	}

	@Override
	public void InstalarAluno(boolean samples) throws SQLException {
		if(samples){
			Aplicacao app = new Aplicacao();
			for(Aluno a: app.getAluno()){
				AdicionarAluno(a);
			}
		}
		
		
	}

	@Override
	public void AdicionarAluno(Aluno aluno) throws SQLException {
		if(aluno.getCodigo()==0){
			aluno.setCodigo(increment);
			increment+=1;
		}
		filaAluno.add(aluno);
	
		
	}

	@Override
	public void RemoverAluno(Aluno aluno) throws SQLException,
			AlunoNaoEncontradoException {
		filaAluno.remove(aluno);
		
		
	}
	
	@Override
	public ArrayList<Aluno> ListaAluno() throws listaAlunoVaziaException, SQLException {
		ArrayList <Aluno> array = new ArrayList<>();
		array.addAll(filaAluno);
		return array;
	}

	@Override
	public Aluno BuscarAluno(int codigo) throws AlunoNaoEncontradoException,
			SQLException {
		Aluno busca= null;
		for(Aluno a: filaAluno){
			if(codigo == a.getCodigo()){
				busca = a;
			}
		}
		return busca;
	}
				
		
		
	

	@Override
	
	public void EditarAluno(Aluno aluno) throws AlunoNaoEncontradoException,
			SQLException {
		Aluno novo = BuscarAluno(aluno.getCodigo());
			if(novo!=null){
				novo.setNome(aluno.getNome());
				
				novo.setTurma(aluno.getTurma());
			}else{
				throw new AlunoNaoEncontradoException();
			}
	}
	
	
	

}
